<?php

namespace Database\Factories;

use App\Models\Post;
use App\Models\User;
use App\Models\Comment;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Comment>
 */
class CommentFactory extends Factory
{
    protected $model = Comment::class;

    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        $createdAt = $this->faker->dateTimeBetween('-1 year', 'now');
        
        // 中文评论内容模板
        $commentTemplates = [
            '这篇文章写得很棒，学到了很多！',
            '感谢分享，内容非常实用。',
            '有一些地方不太理解，能否详细解释一下？',
            '这个思路很不错，我也在项目中尝试过类似的方法。',
            '期待后续的更新，继续关注中。',
            '写得很好，特别是关于性能优化的部分。',
            '感谢作者的详细讲解，受益匪浅。',
            '这个方案解决了我们项目中的实际问题。',
            '内容很全面，收藏了！',
            '有一些疑问，希望作者能解答一下。',
            '实践出真知，这个方法确实有效。',
            '文章结构清晰，容易理解。',
            '这个技术点讲解得很透彻。',
            '感谢分享，已经按照文章内容实践了。',
            '希望能看到更多类似的文章。',
        ];
        
        // 随机选择1-3条评论内容组合
        $contents = [];
        $count = rand(1, 3);
        for ($i = 0; $i < $count; $i++) {
            $contents[] = $this->faker->randomElement($commentTemplates);
        }
        
        $content = implode("\n\n", $contents);
        
        return [
            'post_id' => Post::factory(),
            'user_id' => User::factory(),
            'parent_id' => null,
            'content' => $content,
            'is_approved' => $this->faker->boolean(90),
            'created_at' => $createdAt,
            'updated_at' => $this->faker->dateTimeBetween($createdAt, 'now'),
        ];
    }
    
    /**
     * 设置评论为已批准
     */
    public function approved(): static
    {
        return $this->state(function (array $attributes) {
            return [
                'is_approved' => true,
            ];
        });
    }
    
    /**
     * 设置评论为未批准
     */
    public function unapproved(): static
    {
        return $this->state(function (array $attributes) {
            return [
                'is_approved' => false,
            ];
        });
    }
    
    /**
     * 设置评论为回复
     */
    public function asReply(): static
    {
        return $this->state(function (array $attributes) {
            return [
                'parent_id' => Comment::factory(),
            ];
        });
    }
} 